﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;

namespace PresentacionEscritorio
{
    public partial class frmConsultarCaja : Form
    {
        private CajaDiaria caja;
        private GestorCaja gc;

        public frmConsultarCaja()
        {
            InitializeComponent();
        }

        private void frmConsultarCaja_Load(object sender, EventArgs e)
        {
            gc = new GestorCaja();
            timer1.Start();

            caja = ((frmMdiContainer)this.MdiParent).MiCaja;
            txtInicioCaja.Text = caja.HoraApertura.ToString();
            
            GestorEmpleado ge = new GestorEmpleado();
            Empleado emp = ge.obtenerEmpleadoPorLegajo((long)caja.LegajoEmpleado);
            txtResponsableCaja.Text = emp.Apellido + ", " + emp.Nombre;

            cargarGrilla();
        }

        public void cargarGrilla()
        {
            //limpiamos la grilla
            if (grdDetalleCaja.RowCount > 0)
                grdDetalleCaja.Rows.Clear();

            float totalDebe = 0, totalHaber = 0, saldo = 0;
            caja = gc.obtenerCajaCompleta(caja.IdCaja);
            
            int i = grdDetalleCaja.Rows.Add();
            grdDetalleCaja.Rows[i].Cells["Observaciones"].Value = "Caja";
            grdDetalleCaja.Rows[i].Cells["Debe"].Value = caja.MontoApertura;
            totalDebe += caja.MontoApertura;

            foreach (DetalleCajaDiaria item in caja.DetallesCajaDiaria)
            {
                int fila = grdDetalleCaja.Rows.Add();
                grdDetalleCaja.Rows[fila].Cells["Observaciones"].Value = item.Observaciones;
                switch (item.IdTipoMovimiento)
                {
                    case 1: //ingreso
                        grdDetalleCaja.Rows[fila].Cells["Debe"].Value = item.Monto;
                        totalDebe += item.Monto;
                        break;
                    case 2: //egreso
                        grdDetalleCaja.Rows[fila].Cells["Haber"].Value = item.Monto;
                        totalHaber += item.Monto;
                        break;
                    default:
                        break;
                }
            }

            saldo = totalDebe - totalHaber;
            txtSaldo.Text = saldo.ToString();
        }

        private void btnCierreCaja_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("Seguro que desea cerrar la caja del turno actual?", "Confirmación", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            if (dr == DialogResult.OK)
            {
                cerrarCajaActual();
            }

        }

        private void cerrarCajaActual()
        {
            caja.HoraCierre = DateTime.Now.TimeOfDay;
            caja.MontoCierre = float.Parse(txtSaldo.Text);
            caja.EstaAbierta = false;

            ((frmMdiContainer)this.MdiParent).MiCaja = caja;

            GestorCaja.cerrarCaja(caja);

            //cierra la ventana de la caja
            this.Dispose();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            txtFechaCajaDiaria.Text = DateTime.Now.ToString();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void btnActualizarCaja_Click(object sender, EventArgs e)
        {
            cargarGrilla();
        }

        private void btnAgregarPagoOtros_Click(object sender, EventArgs e)
        {
            frmPagoOtrosConceptos form1 = new frmPagoOtrosConceptos();
            form1.IdCaja = caja.IdCaja;
            form1.LegajoEmp = (long)caja.LegajoEmpleado;
            form1.Owner = this;
            form1.ShowDialog();
        }
    }
}
